/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.camachosanchez.gui.table;

import com.camachosanchez.bean.ControlReencauche;
import com.camachosanchez.bean.DetalleControlReencauche;
import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;

/**
 *
 * @author Rolando
 */
public class ModeloTablaReencauche implements TableModel {

    private LinkedList datos = new LinkedList();
    private LinkedList listeners = new LinkedList();

    @Override
    public int getRowCount() {
        return datos.size();
    }

    @Override
    public int getColumnCount() {
        return 8;
    }

    @Override
    public String getColumnName(int columnIndex) {
        switch (columnIndex) {
            case 0:
                return "";
            case 1:
                return "Nº GUÍA";
            case 2:
                return "DISTRIBUIDOR";
            case 3:
                return "TELÉFONO";
            case 4:
                return "DIRECCIÓN";
            case 5:
                return "Nº LLANTAS";
            case 6:
                return "ENVÍO";
            case 7:
                return "";
            default:
                return "";
        }
    }

    @Override
    public Class<?> getColumnClass(int columnIndex) {
        return String.class;
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return false;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        ControlReencauche aux;
        aux = (ControlReencauche) (datos.get(rowIndex));
        String texto = "";
        Format formatter;
        formatter = new SimpleDateFormat("dd/MM/yyyy");
        switch (columnIndex) {
            case 1:
                texto = aux.getNumGuiaRemision();
                break;
            case 2:
                texto = aux.getIdDistribuidorNeumaticos().getNombre();
                break;
            case 3:
                texto = aux.getTelefono();
                break;
            case 4:
                texto = "" + aux.getDireccion();
                break;
            case 5:
                List<DetalleControlReencauche> detalle = aux.getDetalleControlReencaucheList();
                int total = 0;
                for(DetalleControlReencauche item : detalle){
                    if(item.getEstado() && item.getNumFactura() == null){
                        total ++;
                    }
                }
                texto = "" + total;
                break;
            case 6:
                Date fecha = aux.getFechaEnvio();
                if (fecha != null) {
                    texto = formatter.format(fecha);
                } else {
                    texto = "";
                }
                break;
            case 7:
                texto = "" + aux.getId();
                break;
            default:
                break;
        }
        if (texto == null) {
            texto = "";
        }
        return texto;
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
//        ControlReencauche aux;
//        aux = (ControlReencauche) (datos.get(rowIndex));
//        switch (columnIndex) {
//            case 0:
//                aux.setNumGuiaRemision("" + aValue);
//                break;
//            case 1:
//                DistribuidoresNeumaticos dist = new DistribuidoresNeumaticos();
//                dist.setNombre("" + aValue);
//                aux.setIdDistribuidorNeumaticos(dist);
//                break;
//            case 2:
//                aux.setTelefono("" + aValue);
//                break;
//            case 3:
//                aux.setDireccion("" + aValue);
//            case 4:
//                break;
//                case 5:
//                aux.setId(Integer.parseInt(aValue.toString()));
//                break;
//        }
        TableModelEvent evento = new TableModelEvent(this, rowIndex, rowIndex, columnIndex);
        avisaSuscriptores(evento);
    }

    @Override
    public void addTableModelListener(TableModelListener l) {
        listeners.add(l);
    }

    @Override
    public void removeTableModelListener(TableModelListener l) {
        listeners.remove(l);
    }

    private void avisaSuscriptores(TableModelEvent evento) {
        int i;
        for (i = 0; i < listeners.size(); i++) {
            ((TableModelListener) listeners.get(i)).tableChanged(evento);
        }
    }

    public void agregarRegistro(ControlReencauche evt) {
        datos.add(evt);
        TableModelEvent evento;
        evento = new TableModelEvent(this, this.getRowCount() - 1, this.getRowCount() - 1, TableModelEvent.ALL_COLUMNS, TableModelEvent.INSERT);
        avisaSuscriptores(evento);
    }

    public void limpiar() {
        datos.clear();
        TableModelEvent evento;
        evento = new TableModelEvent(this, this.getRowCount() - 1, this.getRowCount() - 1, TableModelEvent.ALL_COLUMNS, TableModelEvent.DELETE);
        avisaSuscriptores(evento);
    }
}
